package com.example.leetcode.leetcode.hot100;

import java.util.Stack;

/**
 * @author haitao
 * @date 2021/7/28 2:45 下午
 */
public class Solution461 {
    public int hammingDistance(int x, int y) {
        int result = 0;
        Stack<Integer> bitX = new Stack<>();
        Stack<Integer> bitY = new Stack<>();

        while (x != 0 || y != 0) {
            bitX.add(x % 2);
            x /= 2;

            bitY.add(y % 2);
            y /= 2;
        }

        System.out.println(bitX);
        System.out.println(bitY);
        int loop = Math.max(bitX.size(), bitY.size());
        while (loop-- > 0) {
            int tX = bitX.size() > 0 ? bitX.pop() : 0;
            int tY = bitY.size() > 0 ? bitY.pop() : 0;
            if (tX != tY) {
                result++;
            }
        }
        return result;
    }

    //通过位运算
    public int hammingDistanceBit(int x, int y) {
        int ret = 0;
        //异或得到二进制位置上不相同的数字
        int t = x ^ y;
        while (t>0){
            //与，二进制对应位置的数字都为1，结果才为1
            ret+= t&1;
            // 右移一位
            t >>= 1;
        }

        return ret;
    }

    public static void main(String[] args) {
        Solution461 solution461 = new Solution461();
        int res = solution461.hammingDistance(1, 4);
        System.out.println(res);
    }
}
